package com.softer.wxzj.mapper;

import com.softer.wxzj.entity.AccCalculateInterestInfo;
import com.softer.wxzj.entity.BaseBuildInfo;
import com.softer.wxzj.mapper.base.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author zcz
 * @date 2019/7/29
 */
@Repository
public interface AccCalculateInterestInfoMapper extends BaseMapper<AccCalculateInterestInfo> {
    AccCalculateInterestInfo getInfoByRateNo(String rateNo);

    /**
     * 根据结息编号查询自然幢汇总金额
     *
     * @param rateNo
     * @return
     */
    List<Map<String, String>> getBuildCalculateListByRateNo(String rateNo);

    /**
     * 根据结息编号查询汇总金额
     *
     * @param rateNo
     * @return
     */
    String getSumPayAmountByRateNo(String rateNo);

    /**
     * 根据结息编号汇总自然幢结息信息
     *
     * @param rateNo
     * @return
     */
    List<BaseBuildInfo> getBuildCalCollectByRateNo(String rateNo);

    /**
     * 查询结息日期之前是否结算
     *
     * @param interestDate
     * @return
     */
    int getJSCountByInterestDate(String interestDate);

    /**
     * 查询最小的缴存记账日期
     *
     * @return
     */
    String getMinDepTallyDate(String interestDate);

    /**
     * 结息状态查询列表
     *
     * @param accCalculateInterestInfo
     * @return
     */
    List<AccCalculateInterestInfo> getRecordList(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息清册小区列表
     *
     * @param accCalculateInterestInfo
     * @return
     */
    List<AccCalculateInterestInfo> getInventoryHouseList(AccCalculateInterestInfo accCalculateInterestInfo);

    AccCalculateInterestInfo getInventoryHouseListAll(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息清册小区列表
     *
     * @param accCalculateInterestInfo
     * @return
     */
    List<AccCalculateInterestInfo> getInventoryBuildList(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息清册小区列表 总计
     *
     * @param accCalculateInterestInfo
     * @return
     */
    AccCalculateInterestInfo getInventoryBuildListAll(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息清册小区列表
     *
     * @param accCalculateInterestInfo
     * @return
     */
    List<AccCalculateInterestInfo> getInventoryRegionList(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 根据结息id查询是否有当前使用的结息实例合计
     *
     * @param accCalculateInterestInfo
     * @return
     */
    AccCalculateInterestInfo getInventoryRegionListAll(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 根据结息id查询是否有当前使用的结息实例
     *
     * @param rateId
     * @return
     */
    int getCountByRateId(String rateId);

    /**
     * 查询当前详情信息
     *
     * @return
     */
    AccCalculateInterestInfo getCurrentInfo();

    /**
     * 根据结息类型和结息日期删除状态为当前状态的结息记录
     *
     * @param interestType
     * @param interestDate
     * @return
     */
    int deleteByInterestTypeAndInterestDate(@Param("interestType") String interestType, @Param("interestDate") String interestDate);

    /**
     * 查询最近一笔结息信息
     *
     * @return
     */
    AccCalculateInterestInfo getLastCalculationInfo();

    /**
     * 根据查询结息明细
     *
     * @param id
     * @param fuzzy
     * @return
     */
    List<AccCalculateInterestInfo> getRateDetailList(@Param("id") String id, @Param("fuzzy") String fuzzy);

    /**
     * 结息信息汇总查询 小区列表
     *
     * @param accCalculateInterestInfo
     * @return
     */
    List<AccCalculateInterestInfo> getInterestRegionList(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息信息汇总查询 小区总计
     *
     * @param accCalculateInterestInfo
     * @return
     */
    AccCalculateInterestInfo getInterestRegionTotal(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息信息汇总查询 自然幢列表
     *
     * @param accCalculateInterestInfo
     * @return
     */
    List<AccCalculateInterestInfo> getInterestBuildList(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息信息汇总查询 自然幢列表总计
     *
     * @param accCalculateInterestInfo
     * @return
     */
    AccCalculateInterestInfo getInterestBuildTotal(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息信息汇总查询 房屋列表
     *
     * @param accCalculateInterestInfo
     * @return
     */
    List<AccCalculateInterestInfo> getInterestHouseList(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息信息汇总查询 房屋列表合计
     *
     * @param accCalculateInterestInfo
     * @return
     */
    AccCalculateInterestInfo getInterestHouseTotal(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息信息汇总查询 房屋详情列表
     *
     * @param accCalculateInterestInfo
     * @return
     */
    List<AccCalculateInterestInfo> getInterestHouseDetailList(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 结息信息汇总查询 房屋详情合计
     *
     * @param accCalculateInterestInfo
     * @return
     */
    AccCalculateInterestInfo getInterestHouseDetailTotal(AccCalculateInterestInfo accCalculateInterestInfo);

    /**
     * 根据结息日期查询当前详情信息
     *
     * @return
     */
    AccCalculateInterestInfo getCurrentInfoByInterestDate(String interestDate);

    int updateStateByRateNo(@Param("rateNo") String rateNo);

    /**
     * 修改正在计算状态
     *
     * @param isCalculation
     * @param id
     * @return
     */
    int updateIsCalculationById(@Param("isCalculation") String isCalculation, @Param("id") String id);

    /**
     * 修改结息为结束状态
     *
     * @param id
     * @return
     */
    int overAccCalculateInterestInfo(@Param("totalInterest") BigDecimal totalInterest, @Param("id") String id);

    /**
     * 根据id查询预结息状态
     *
     * @param id
     * @return
     */
    String getIsAdvanceById(String id);

    /**
     * 是不是第一条结息
     *
     * @return
     */
    List<AccCalculateInterestInfo> getCountNum();

    int updateYear(String base);

    /**
     * 查询
     *
     * @return
     */
    List<AccCalculateInterestInfo> selectAdv();

    int selectAdvChange();

    AccCalculateInterestInfo selectMin();


    AccCalculateInterestInfo selectMaxChange();

    int deleteMin( String id);

    AccCalculateInterestInfo selectByDate();

    int selectHaveAcc();
    int selectNotHaveAcc();
}